9151
17759
Έχω παίξει με την JSON εδώ και αρκετό καιρό, απλώς το έβγαλα ως κείμενο και δεν έβλαψε κανέναν (για τον οποίο γνωρίζω), αλλά θα ήθελα να αρχίσω να κάνω τα πράγματα σωστά.
Έχω δει τόσα πολλά υποτιθέμενα "πρότυπα" για τον τύπο περιεχομένου JSON:
εφαρμογή / json
εφαρμογή / x-javascript
κείμενο / javascript
κείμενο / x-javascript
κείμενο / x-json
Αλλά ποιο είναι σωστό ή καλύτερο; Καταλαβαίνω ότι υπάρχουν θέματα ασφάλειας και υποστήριξης του προγράμματος περιήγησης που διαφέρουν μεταξύ τους.
Ξέρω ότι υπάρχει μια παρόμοια ερώτηση, τι είδους MIME αν το JSON επιστρέφεται από ένα REST API ;, αλλά θα ήθελα μια ελαφρώς πιο στοχευμένη απάντηση. 
1
2
Επόμενο
Για κείμενο JSON:
εφαρμογή / json
Ο τύπος πολυμέσων MIME για κείμενο JSON είναι application / json. Η προεπιλεγμένη κωδικοποίηση είναι UTF-8. (Πηγή: RFC 4627).
Για JSONP (τρέξιμο JavaScript) με επιστροφή κλήσης:
εφαρμογή / javascript
Ακολουθούν ορισμένες αναρτήσεις ιστολογίου που αναφέρονται στα σχετικά σχόλια:
Γιατί δεν πρέπει να χρησιμοποιείτε κείμενο / html για JSON
Ο Internet Explorer έχει μερικές φορές προβλήματα με την εφαρμογή / json
Μια μάλλον ολοκληρωμένη λίστα μιμητών και τι πρέπει να χρησιμοποιηθούν
Η επίσημη λίστα τύπων mime στο IANA από την απάντηση του @ gnrfan παρακάτω
|
Η IANA έχει καταχωρίσει τον επίσημο τύπο MIME για το JSON ως application / json.
Όταν ρωτήθηκε για το γιατί όχι το κείμενο / json, ο Crockford φαίνεται να είπε ότι το JSON δεν είναι πραγματικά JavaScript ούτε κείμενο και επίσης το IANA ήταν πιο πιθανό να διανείμει την εφαρμογή / * από το κείμενο / *.
Περισσότεροι πόροι:
Τύποι μέσων
Αίτηση για σχόλια 4627
bluesmoon: Το JSON έχει έναν τύπο
|
Για JSON:
Τύπος περιεχομένου: application / json
Για JSON-P:
Τύπος περιεχομένου: εφαρμογή / javascript
|
Φυσικά, ο σωστός τύπος μέσου MIME για το JSON είναι το application / json, αλλά είναι απαραίτητο να συνειδητοποιήσουμε τι είδους δεδομένα αναμένεται στην εφαρμογή σας.
Για παράδειγμα, χρησιμοποιώ το Ext GWT και η απόκριση του διακομιστή πρέπει να είναι κείμενο / html αλλά περιέχει δεδομένα JSON.
Πλευρά πελάτη, ακροατής φόρμας Ext GWT
uploadForm.getForm (). addListener (νέος FormListenerAdapter ()
{
@Καταπατώ
public void onActionFailed (Φόρμα φόρμας, int httpStatus, String responseText)
{
MessageBox.alert ("Σφάλμα");
}
@Καταπατώ
public void onActionComplete (Έντυπο φόρμας, int httpStatus, String responseText)
{
MessageBox.alert ("Επιτυχία");
}
});
Σε περίπτωση χρήσης τύπου απόκρισης εφαρμογής / json, το πρόγραμμα περιήγησης με προτείνει να αποθηκεύσω το αρχείο.
Απόσπασμα πηγαίου κώδικα διακομιστή χρησιμοποιώντας Spring MVC
επιστροφή νέου AbstractUrlBasedView ()
{
@SuppressWarnings ("μη επιλεγμένο")
@Καταπατώ
προστατευμένο κενό renderMergedOutputModel (μοντέλο χάρτη, αίτημα HttpServletRequest,
Η απόκριση HttpServletResponse) ρίχνει την Εξαίρεση
{
response.setContentType ("κείμενο / html");
Respons.getWriter (). γράψτε (json);
}
};
|
JSON:
Η απόκριση δημιουργείται δυναμικά δεδομένα, σύμφωνα με τις παραμέτρους ερωτήματος που διαβιβάζονται στη διεύθυνση URL.
Παράδειγμα:
{"Όνομα": "Foo", "Id": 1234, "Rank": 7}
Τύπος περιεχομένου: application / json
JSON-P:
JSON με επένδυση.
Η απόκριση είναι δεδομένα JSON, με μια κλήση συνάρτησης τυλιγμένη γύρω από αυτήν.
Παράδειγμα:
functionCall ({"Όνομα": "Foo", "Id": 1234, "Rank": 7});
Τύπος περιεχομένου: εφαρμογή / javascript
|
Εάν χρησιμοποιείτε το Ubuntu ή το Debian και εξυπηρετείτε αρχεία .json μέσω του Apache, ίσως θέλετε να προβάλλετε τα αρχεία με τον σωστό τύπο περιεχομένου. Το κάνω αυτό κυρίως επειδή θέλω να χρησιμοποιήσω την επέκταση Firefox JSONView
Το Ap_ module mod_mime θα σας βοηθήσει να το κάνετε εύκολα. Ωστόσο, με το Ubuntu πρέπει να επεξεργαστείτε τους τύπους αρχείων /etc/mime.types και να προσθέσετε τη γραμμή
εφαρμογή / json json
Στη συνέχεια, κάντε επανεκκίνηση του Apache:
Επανεκκίνηση υπηρεσίας sudo apache2
|
Εάν καλείτε ASP.NET Web Services από την πλευρά του πελάτη, πρέπει να χρησιμοποιήσετε την εφαρμογή / json για να λειτουργήσει. Πιστεύω ότι αυτό είναι το ίδιο για τα πλαίσια jQuery και Ext.
|
Ο σωστός τύπος περιεχομένου για το JSON είναι η εφαρμογή / json ΕΧΟΥΝ χρησιμοποιείτε το JSONP, επίσης γνωστό ως JSON με το Padding, το οποίο είναι στην πραγματικότητα JavaScript και έτσι ο σωστός τύπος περιεχομένου θα ήταν εφαρμογή / javascript.
|
Δεν υπάρχει αμφιβολία ότι η εφαρμογή / json είναι ο καλύτερος τύπος MIME για μια απόκριση JSON.
Αλλά είχα κάποια εμπειρία όπου έπρεπε να χρησιμοποιήσω την εφαρμογή / x-javascript λόγω κάποιων προβλημάτων συμπίεσης. Το περιβάλλον φιλοξενίας μου είναι κοινή φιλοξενία με το GoDaddy. Δεν μου επιτρέπουν να αλλάξω διαμορφώσεις διακομιστή. Είχα προσθέσει τον ακόλουθο κώδικα στο αρχείο web.config για συμπίεση απαντήσεων.


<δυναμικοί τύποι>





<στατικοί τύποι>







Χρησιμοποιώντας αυτό, οι σελίδες .aspx συμπιέστηκαν με g-zip αλλά οι απαντήσεις JSON δεν ήταν. πρόσθεσα

στις ενότητες στατικών και δυναμικών τύπων. Αλλά αυτό δεν συμπιέζει καθόλου τις απαντήσεις JSON.
Μετά από αυτό, κατάργησα αυτόν τον τύπο που προστέθηκε πρόσφατα και πρόσθεσα

και στις δύο ενότητες στατικών και δυναμικών τύπων και άλλαξε τον τύπο απόκρισης
.ashx (ασύγχρονος χειριστής) σε
εφαρμογή / x-javascript
Και τώρα βρήκα ότι οι απαντήσεις μου στο JSON συμπιέστηκαν με φερμουάρ. Προτείνω λοιπόν προσωπικά να το χρησιμοποιήσετε
εφαρμογή / x-javascript
μόνο εάν θέλετε να συμπιέσετε τις απαντήσεις σας JSON σε κοινόχρηστο περιβάλλον φιλοξενίας. Επειδή στην κοινή φιλοξενία, δεν σας επιτρέπουν να αλλάξετε τα IISδιαμορφώσεις.
|
Μόνο όταν χρησιμοποιώ την εφαρμογή / json ως τύπο MIME έχω τα ακόλουθα (από τον Νοέμβριο του 2011 με τις πιο πρόσφατες εκδόσεις του Chrome, Firefox με Firebug):
Δεν υπάρχουν άλλες προειδοποιήσεις από το Chrome όταν το JSON φορτώνεται από το διακομιστή.
Το Firebug θα προσθέσει μια καρτέλα στην απόκριση που σας δείχνει τα δεδομένα JSON
μορφοποιημένο. Εάν ο τύπος MIME είναι διαφορετικός, θα εμφανιστεί ως
«Περιεχόμενο απόκρισης».
|
Δεν λειτουργούν όλα για εφαρμογή τύπου περιεχομένου / json.
Εάν χρησιμοποιείτε τη φόρμα Ext JS για να ανεβάσετε το αρχείο, λάβετε υπόψη ότι η απόκριση του διακομιστή αναλύεται από το πρόγραμμα περιήγησης για τη δημιουργία του εγγράφου για το